home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / sbin / run-crons < prev    next >
Text File  |  2005-10-13  |  3KB  |  108 lines

  1. #!/bin/bash
  2. #
  3. # $Header: /var/cvsroot/gentoo-x86/sys-process/cronbase/files/run-crons-0.3.2,v 1.1 2005/03/09 12:51:34 ka0ttic Exp $
  4. #
  5. # 08 Mar 2005; Aaron Walker <ka0ttic@gentoo.org> run-crons:
  6. #     Ignore the error messages from find caused by race conditions, since
  7. #     we could care less about the error as long as the file has been removed.
  8. #     See bug 8506.
  9. #
  10. # 06 May 2004; Aron Griffis <agriffis@gentoo.org> run-crons:
  11. #     Make the locking actually work.  The old code was racy.
  12. #     Thanks to Mathias Gumz in bug 45155 for some cleanups.
  13. #
  14. # 23 Jun 2002; Jon Nelson <jnelson@gentoo.org> run-crons:
  15. #     fixed a race condition, where cron jobs and run-crons wanted to
  16. #     delete touch files
  17. #
  18. # 20 Apr 2002; Thilo Bangert <bangert@gentoo.org> run-crons:
  19. #     moved lastrun directory to /var/spool/cron/lastrun
  20. #
  21. # Author: Achim Gottinger <achim@gentoo.org>
  22. #
  23. # Mostly copied from SuSE
  24. #
  25. # this script looks into /etc/cron.[hourly|daily|weekly|monthly]
  26. # for scripts to be executed. The info about last run is stored in
  27. # /var/spool/cron/lastrun
  28.  
  29. LOCKDIR=/var/spool/cron/lastrun
  30. LOCKFILE=${LOCKDIR}/lock
  31.  
  32. mkdir -p ${LOCKDIR}
  33.  
  34. # Make sure we're not running multiple instances at once.
  35. # Try twice to lock, otherwise give up.
  36. for ((i = 0; i < 2; i = i + 1)); do
  37.     ln -sn $$ ${LOCKFILE} 2>/dev/null && break
  38.  
  39.     # lock failed, check for a running process.
  40.     # handle both old- and new-style locking.
  41.     cronpid=$(readlink ${LOCKFILE} 2>/dev/null) ||
  42.     cronpid=$(cat ${LOCKFILE} 2>/dev/null) ||
  43.     continue    # lockfile disappeared? try again
  44.  
  45.     # better than kill -0 because we can verify that it's really
  46.     # another run-crons process
  47.     if [[ $(</proc/${cronpid}/cmdline) == $(</proc/$$/cmdline) ]] 2>/dev/null; then
  48.         # whoa, another process is really running
  49.         exit 0
  50.     else
  51.         rm -f ${LOCKFILE}
  52.     fi
  53. done
  54.  
  55. # Check to make sure locking was successful
  56. if [[ ! -L ${LOCKFILE} ]]; then
  57.     echo "Can't create or read existing ${LOCKFILE}, giving up"
  58.     exit 1
  59. fi
  60.  
  61. # Set a trap to remove the lockfile when we're finished
  62. trap "rm -f ${LOCKFILE}" 0 1 2 3 15
  63.  
  64.  
  65. for BASE in hourly daily weekly monthly
  66. do
  67.     CRONDIR=/etc/cron.${BASE}
  68.  
  69.     test -d $CRONDIR || continue
  70.  
  71.     if [ -e ${LOCKDIR}/cron.$BASE ]
  72.     then
  73.     case $BASE in
  74.         hourly)
  75.         #>= 1 hour, 5 min -=> +65 min
  76.         TIME="-cmin +65" ;;
  77.         daily)
  78.         #>= 1 day, 5 min -=> +1445 min
  79.         TIME="-cmin +1445"  ;;
  80.         weekly)
  81.         #>= 1 week, 5 min -=> +10085 min
  82.         TIME="-cmin +10085"  ;;
  83.         monthly)
  84.         #>= 31 days, 5 min -=> +44645 min
  85.         TIME="-cmin +44645" ;;
  86.     esac
  87.         find ${LOCKDIR} -name cron.$BASE $TIME -exec rm {} \; &>/dev/null || true
  88.     fi
  89.  
  90.     # if there is no touch file, make one then run the scripts
  91.     if [ ! -e ${LOCKDIR}/cron.$BASE ]
  92.     then
  93.         touch ${LOCKDIR}/cron.$BASE
  94.  
  95.         set +e
  96.         for SCRIPT in $CRONDIR/*
  97.         do
  98.             if [[ -x $SCRIPT && ! -d $SCRIPT ]]; then
  99.                 $SCRIPT
  100.             fi
  101.         done
  102.     fi
  103. done
  104.  
  105. # Clean out bogus cron.$BASE files with future times
  106. touch ${LOCKDIR}
  107. find ${LOCKDIR} -newer ${LOCKDIR} -exec /bin/rm -f {} \; &>/dev/null || true
  108.